home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (DO)
/
A+ Disk Magazine Volume 1, No. 1 (1984)(Ziff-Davis).zip
/
A+ Disk Magazine Volume 1, No. 1 (1984)(Ziff-Davis).do
/
LOANS.bas
< prev
next >
Wrap
BASIC Source File
|
1996-12-24
|
18KB
|
480 lines
1 HOME : VTAB 8: HTAB 12: PRINT "A+ DISK MAGAZINE"
2 VTAB 10: HTAB 16: PRINT "PRESENTS"
3 VTAB 12: HTAB 13: INVERSE : PRINT "LOAN ANALYZER": NORMAL
4 FOR I = 1 TO 500: NEXT I
5 VTAB 15: HTAB 12: PRINT "BY ZYNCON CORP."
7 VTAB 17: HTAB 6: PRINT "PROGRAMMED BY JASON WINSHELL"
8 VTAB 23: HTAB 22: PRINT "(C)COPYRIGHT 1983"
9 FOR I = 1 TO 4000: NEXT I
10 DIM F(7,3),P$(7),PARSET(7),ER(7),TABLE(60,3),PTABLE(420,3)
20 RESTORE : POKE 34,0
30 DATA 9,30,10
40 DATA 11,30,10
50 DATA 13,32,6
60 DATA 15,28,5
70 DATA 17,30,1
80 DATA 19,30,10
90 FALSE = 0:TRUE = 1
100 FOR I = 1 TO 6: READ F(I,1),F(I,2),F(I,3): NEXT I
110 HOME
120 GOSUB 30070
130 GOSUB 31000
1000 REM *** MAIN CONTROL ****
1010 GOSUB 3000
1020 GOSUB 9000
1030 GOSUB 8000
1040 GOSUB 2000
1050 GOSUB 4000
1060 GOSUB 7000
1070 VTAB 22: HTAB 9
1080 PRINT "<C> , <R>, <Q>, OR <CR>";
1090 GET T$
1100 T$ = CHR$( ASC( LEFT$(T$,1)) -( ASC( LEFT$(T$,1)) > = 97) *32)
1110 IF T$ < > CHR$(13) AND T$ < >"C" AND T$ < >"R" AND T$ < >"Q" THEN 1090
1120 HTAB 1: CALL -958
1130 IF T$ = CHR$(13) THEN 1050
1140 IF T$ = "R" THEN 1010
1150 IF T$ = "Q" THEN HOME : END
1160 IF GOOD = FALSE OR MISS = 0 THEN 1070
1170 GOSUB 11000: REM CALCULATE
1180 GOSUB 2000
1190 CNS = 0
1200 VTAB 23: HTAB 1: PRINT "DETAILED PAYBACK SCHEDULE (Y/N) ? ";
1210 GET T$
1220 T$ = CHR$( ASC( LEFT$(T$,1)) -( ASC( LEFT$(T$,1)) > = 97) *32)
1230 IF T$ < >"Y" AND T$ < >"N" THEN 1210
1240 IF T$ = "N" THEN HTAB 1: CALL -958: GOTO 1070
1250 IF N/PFQ < = 60 THEN 1280
1260 VTAB 23: HTAB 1: PRINT "TOO MANY PERIODS, ... HIT A KEY ";
1270 GET T$: VTAB 23: HTAB 1: CALL -958: GOTO 1070
1280 IF PFQ = 1 THEN 1310
1290 IF N < = 60 THEN 1310
1300 CNS = 1
1310 IF TYPE$ = "M" THEN GOSUB 3040: GOTO 1330
1320 GOSUB 3080
1330 GOSUB 3120
1340 GOSUB 19000
1350 GOSUB 3000
1360 GOSUB 9060
1370 GOSUB 2000
1380 GOTO 1070
1390 END
2000 VTAB F(1,1): HTAB 1
2010 PRINT "(1) AMOUNT TO BORROW: $ ";:F1$ = "#######":F2$ = "##":V = VAL(P$(1)): GOSUB 29000: PRINT O1$;:P$(1) = O1$
2020 VTAB F(2,1): HTAB 1
2030 PRINT " FINAL BALLOON PAYMENT: $ ";:F1$ = "#######":F2$ = "##":V = VAL(P$(2)): GOSUB 29000: PRINT O1$;:P$(2) = O1$
2040 VTAB F(3,1): HTAB 1
2050 PRINT "(2) ANNUAL INTEREST RATE: ";:F1$ = "##":F2$ = "###":V = VAL(P$(3)): GOSUB 29000: PRINT O1$;: PRINT " %";:P$(3) = O1$
2060 VTAB F(4,1): HTAB 1
2070 PRINT "(3) DURATION OF BORROWING: ";P$(4);: HTAB 34: PRINT " YY,MM ";
2080 VTAB F(5,1): HTAB 1
2090 PRINT " PAYMENT FREQUENCY: ";P$(5);" (M,Q,Y)";
2100 VTAB F(6,1): HTAB 1
2110 PRINT "(4) PAYMENT PER PERIOD: $ ";:F1$ = "#######":F2$ = "##":V = VAL(P$(6)): GOSUB 29000: PRINT O1$;:P$(6) = O1$
2500 RETURN
3000 HOME
3010 HTAB 5: PRINT "LOAN ANALYZER -- SPECIFICATION"
3020 HTAB 5: PRINT "=============================="
3030 RETURN
3040 HOME
3050 HTAB 8: PRINT "MORTGAGE PAYBACK SCHEDULE"
3060 HTAB 8: PRINT "========================="
3070 RETURN
3080 HOME
3090 HTAB 6: PRINT "INSTALLMENT PAYBACK SCHEDULE"
3100 HTAB 6: PRINT "============================"
3110 RETURN
3120 VTAB 4: HTAB 1
3130 PRINT "AMT : $";:F1$ = "#######":F2$ = "##":V = A: GOSUB 29000: PRINT O1$
3140 PRINT "BLN : $";:F1$ = "#######":F2$ = "##":V = B: GOSUB 29000: PRINT O1$
3150 PRINT "PMNT : $";:F1$ = "#######":F2$ = "##":V = P: GOSUB 29000: PRINT O1$
3160 VTAB 4: HTAB 26
3170 PRINT "RATE: ";:F1$ = "##":F2$ = "###":V = ANNT: GOSUB 29000: PRINT O1$;" %";
3180 VTAB 5: HTAB 26
3190 PRINT "DUR : ";P$(4);
3200 VTAB 6: HTAB 26
3210 PRINT "FREQ: ";
3220 IF PFQ$ = "M" THEN PRINT "MONTHLY";: GOTO 3250
3230 IF PFQ$ = "Q" THEN PRINT "QUARTERLY";: GOTO 3250
3240 PRINT "YEARLY";
3250 VTAB 9: HTAB 1
3260 PRINT " | CUMUL. | CUMUL. | PAY-OFF"
3262 IF CNS = 1 THEN PRINT " Y ";: GOTO 3270
3265 PRINT " ";PFQ$;" ";
3270 PRINT "| PRINCIPAL | INTEREST | AMOUNT"
3280 PRINT "---------------------------------------"
3290 POKE 34,11: REM WINDOW
3300 RETURN
4000 REM ** ENTRY ROUTINE
4010 PARLINE = 1
4020 TEMP$ = P$(PARLINE): GOSUB 5000
4030 IF F$ = "" THEN 4050
4040 P$(PARLINE) = F$: GOTO 4070
4050 VTAB F(PARLINE,1): HTAB F(PARLINE,2)
4060 PRINT TEMP$;
4070 REM
4080 PARLINE = PARLINE +1
4090 IF PARLINE = 7 THEN RETURN
4100 GOTO 4020
5000 REM SCREEN EDIT SIMULATOR
5010 F$ = ""
5020 ROW = F(PARLINE,1):BC = F(PARLINE,2):FL = F(PARLINE,3)
5030 FP = BC
5040 VTAB ROW: HTAB FP
5050 REM GOSUB 5240
5060 GET T$: IF T$ = CHR$(13) THEN 5220
5070 IF T$ = "/" THEN FP = BC: HTAB FP: PRINT SPC( FL);:TEMP$ = " ":P$(PARLINE) = " ": GOTO 5010
5080 IF ASC(T$) = 8 THEN 5160
5090 IF (T$ <",") OR (T$ >"z") THEN 5060
5100 IF FP = BC +FL THEN 5040
5110 PRINT T$;
5120 F$ = F$ +T$
5130 IF FP = BC THEN PRINT SPC( FL);
5140 FP = FP +1
5150 GOTO 5040
5160 IF FP = BC THEN 5040
5170 IF FP = BC +1 THEN F$ = "": PRINT " ";:FP = BC: GOTO 5040
5180 PRINT " ";
5190 FP = FP -1
5200 F$ = LEFT$(F$,FP -BC)
5210 GOTO 5040
5220 PRINT " ";
5230 RETURN
7000 REM *** CHECK PARAMATERS ROUTINE
7010 FOR I = 1 TO 7:ER(I) = 0:PARSET(I) = 0: NEXT I
7020 GOOD = TRUE
7030 NUMPAR = 0
7040 A = VAL(P$(1))
7050 IF A < = 0 OR A > = 1E +7 THEN GOOD = FALSE:ER(1) = 1: GOTO 7080
7060 PARSET(1) = 1
7070 NUMPAR = NUMPAR +1
7080 B = VAL(P$(2)): IF B <0 OR B > = 1E +7 THEN B = 0
7090 ANNT = VAL(P$(3))
7100 IF ANNT < = 0 OR ANNT > = 1E +7 THEN GOOD = FALSE:ER(3) = 1: GOTO 7130
7110 PARSET(3) = 1
7120 NUMPAR = NUMPAR +1
7130 GOSUB 7600
7140 IF VAL(YY$) < > INT( VAL(YY$)) OR VAL(MM$) < > INT( VAL(MM$)) THEN GOOD = FALSE:ER(4) = 1: GOTO 7200
7150 DUR = VAL(YY$) + VAL(MM$)/12:N = VAL(YY$) *12 + VAL(MM$)
7160 IF DUR < = 0 THEN GOOD = FALSE:ER(4) = 1: GOTO 7200
7170 GOSUB 30000
7180 PARSET(4) = 1
7190 NUMPAR = NUMPAR +1
7200 PFQ$ = P$(5)
7210 PFQ$ = CHR$( ASC( LEFT$(PFQ$,1)) -( ASC( LEFT$(PFQ$,1)) > = 97) *32)
7220 IF PFQ$ < >"M" AND PFQ$ < >"Q" AND PFQ$ < >"Y" THEN GOOD = FALSE:ER(5) = 1: GOTO 7280
7230 IF PFQ$ = "M" THEN PFQ = 12: GOTO 7260
7240 IF PFQ$ = "Q" THEN PFQ = 4: GOTO 7260
7250 PFQ = 1
7260 PARSET(5) = 1
7270 NUMPAR = NUMPAR +1
7275 IF (N <PFQ/12) OR (N *PFQ/12) < > INT(N *PFQ/12) THEN ER(4) = 1:PARSET(4) = 0
7280 P = VAL(P$(6))
7290 IF P < = 0 OR P > = 1E +7 THEN GOOD = FALSE:ER(6) = 1: GOTO 7320
7300 PARSET(6) = 1
7310 NUMPAR = NUMPAR +1
7320 IF NUMPAR <4 THEN GOOD = FALSE:ER(7) = 1
7330 IF GOOD = TRUE THEN ER$ = "PARAMETERS OK ": GOTO 7420
7340 ER$ = "ERROR(S) IN PARAMETERS "
7350 TTER = 0
7360 FOR I = 1 TO 6
7370 IF ER(I) = 0 THEN 7400
7380 TTER = TTER +1
7381 IF I = 3 THEN ER$ = ER$ +"/" +"2": GOTO 7400
7382 IF I = 4 THEN ER$ = ER$ +"/" +"3": GOTO 7400
7383 IF I = 6 THEN ER$ = ER$ +"/" +"4": GOTO 7400
7384 IF I = 5 THEN ER$ = ER$ +"/" +"FREQ": GOTO 7400
7385 ER$ = ER$ +"/" +"1"
7400 NEXT I
7410 IF TTER = 1 AND ER(5) < >1 THEN GOOD = TRUE: GOTO 7330
7420 VTAB 24: HTAB 1
7430 PRINT SPC( 39);
7440 VTAB 24: HTAB 1
7450 PRINT ER$;
7460 A = FN CN(A)
7470 DUR = FN CN(DUR)
7480 P = FN CN(P)
7490 IF GOOD = FALSE THEN 7580
7500 MISS = 0
7510 FOR I = 1 TO 6
7520 IF I = 2 THEN 7540
7530 IF PARSET(I) = 0 THEN MISS = I: GOTO 7550
7540 NEXT I
7550 REM ** MISS IS THE # OF MISSING PARM **
7560 IF MISS < >4 THEN N = N/(12/PFQ)
7570 R = ANNT/PFQ/100
7580 IF GOOD = TRUE THEN GOSUB 2000
7590 RETURN
7600 REM ** CHECK ON YY,MM FORMAT
7610 CMPO = 0: FOR I = 1 TO LEN(P$(4))
7620 IF MID$ (P$(4),I,1) = "," THEN CMPO = I: GOTO 7640
7630 NEXT I
7640 IF CMPO = 0 THEN YY$ = P$(4):MM$ = "": GOTO 7690
7650 IF CMPO = 1 THEN YY$ = "":MM$ = MID$ (P$(4),2, LEN(P$(4)) -1): GOTO 7690
7660 YY$ = MID$ (P$(4),1,CMPO -1)
7670 IF CMPO = 4 THEN MM$ = "": GOTO 7690
7680 MM$ = MID$ (P$(4),CMPO +1, LEN(P$(4)) -CMPO)
7690 RETURN
8000 REM **** CLEAR PARAMETERS
8010 P$(1) = " 0.00"
8020 P$(2) = " 0.00"
8030 P$(3) = " 0.000"
8040 P$(4) = "00,00"
8050 P$(5) = "M"
8060 P$(6) = " 0.00"
8070 RETURN
9000 VTAB 5: HTAB 1: PRINT "INSTALLMENT LOAN OR MORTGAGE : (I/M)";: HTAB 32
9010 GET TYPE$: IF TYPE$ = "" THEN 9010
9020 TYPE$ = CHR$( ASC( LEFT$(TYPE$,1)) -( ASC( LEFT$(TYPE$,1)) > = 97) *32)
9030 IF (TYPE$ < >"I") AND (TYPE$ < >"M") THEN 9010
9040 PRINT TYPE$;
9060 VTAB 5: HTAB 1: CALL -958: PRINT "INSTALLMENT LOAN OR MORTGAGE : ";TYPE$;
9070 VTAB 7: HTAB 1: FOR I = 1 TO 40: PRINT CHR$(95);: NEXT I
9080 RETURN
11000 REM *** CALCULATE ***
11010 IF TYPE$ = "M" THEN 11150
11020 ON MISS GOTO 11030,11310,11060,11090,11310,11120
11030 GOSUB 30350: REM CALC A
11040 A = FN CN(A)
11050 GOTO 11310
11060 GOSUB 30390: REM CALC R
11070 ANNT = 100 *R *PFQ
11080 GOTO 11310
11090 GOSUB 30440: REM CALC N
11100 N = FN CN(N)
11110 DUR = N/PFQ: REM DUR = FN CN(DUR)
11120 GOSUB 30480: REM CALC P
11130 P = FN CN(P)
11140 GOTO 11310
11150 REM *** MORTGAGE ***
11160 ON MISS GOTO 11170,11310,11200,11230,11310,11280
11170 GOSUB 30160: REM CALC A
11180 A = FN CN(A)
11190 GOTO 11310
11200 GOSUB 30190: REM NEWTON R
11210 ANNT = 100 *R *PFQ
11220 GOTO 11310
11230 GOSUB 30250: REM CALC N
11240 N = FN CN(N)
11250 DUR = N
11260 DUR = DUR/PFQ:DUR = FN CN(DUR)
11270 GOTO 11310
11280 GOSUB 30290: REM CALC P
11290 P = FN CN(P)
11300 REM *** POST PROCESS CALCS **
11310 REM *** POST PROCESS CALCS **
11320 IF MISS = 1 THEN P$(1) = STR$(A)
11330 IF MISS = 3 THEN P$(3) = STR$(ANNT)
11340 IF MISS = 4 THEN GOSUB 30000
11350 IF MISS = 5 THEN P$(5) = PFQ$
11360 IF MISS = 6 THEN P$(6) = STR$(P)
11370 PARSET(MISS) = 1:MISS = 0
11380 RETURN
16000 REM ** FILL IN TABLE **
16010 CP = 0
16020 CI = 0
16030 A1 = A
16040 LM = N/PFQ
16050 T1 = 0
16060 IF TYPE$ = "M" THEN 16100
16070 T1 = N *(N +1)/2
16080 LN = 0
16090 IF N/T1 *(N *P -A) >P THEN LN = 1
16100 FOR J = 1 TO N
16110 IF TYPE$ = "M" THEN KI = R *A1: GOTO 16140
16120 IF LN = 0 THEN KI = (N *P -A +B) *(N +1 -J)/T1: GOTO 16140
16130 KI = (N *P -A +B)/N
16140 KP = P -KI
16150 CP = CP +KP
16160 CI = CI +KI
16170 KP = FN CN(KP)
16180 KI = FN CN(KI)
16190 CP = FN CN(CP)
16200 CI = FN CN(CI)
16210 PO = A +B -CP
16220 PO = FN CN(PO)
16230 IF TYPE$ = "M" THEN A1 = A1 -KP
16240 IF CNS < >1 THEN 16300
16250 IF J/PFQ < > INT(J/PFQ) AND J/PFQ <LM THEN 16330
16260 TABLE(J/PFQ,1) = CP
16270 TABLE(J/PFQ,2) = CI
16280 TABLE(J/PFQ,3) = PO
16290 GOTO 16330
16300 TABLE(J,1) = CP
16310 TABLE(J,2) = CI
16320 TABLE(J,3) = PO
16330 PTABLE(J,1) = CP
16332 PTABLE(J,2) = CI
16334 PTABLE(J,3) = PO
16340 NEXT J
16350 IF CNS = 0 THEN TSIZE = N: GOTO 16380
16360 IF LM < > INT(LM) THEN TSIZE = INT(LM +1): GOTO 16380
16370 TSIZE = LM
16380 IF TSIZE < > INT(TSIZE) THEN TSIZE = INT(TSIZE +1)
16390 TABLE(TSIZE,1) = A -B
16400 TABLE(TSIZE,2) = P *N -A +B
16410 TABLE(TSIZE,3) = B
16420 PSIZE = N
16430 IF PSIZE < > INT(PSIZE) THEN PSIZE = INT(PSIZE +1)
16440 PTABLE(PSIZE,1) = A -B
16450 PTABLE(PSIZE,2) = P *N -A +B
16460 PTABLE(PSIZE,3) = B
16470 RETURN
19000 REM ** DETAIL REPORT ***
19010 GOSUB 16000
19020 IF CNS = 1 THEN VTAB 7: HTAB 1: PRINT "ANNUAL CONSOLIDATION";
19030 IF TYPE$ = "I" THEN IF LN = 1 THEN VTAB 7: HTAB 25: PRINT "(LINEAR DECLINE)";
19040 HOME : FOR I = 1 TO TSIZE
19050 F1$ = "###":F2$ = "":V = I: GOSUB 29000: PRINT O1$;"|";
19060 F1$ = "#######":F2$ = "##":V = TABLE(I,1): GOSUB 29000: PRINT O1$;" | ";
19070 F1$ = "#######":F2$ = "##":V = TABLE(I,2): GOSUB 29000: PRINT O1$;" |";
19080 F1$ = "#######":F2$ = "##":V = TABLE(I,3): GOSUB 29000: PRINT O1$;
19090 IF (I/12 < > INT(I/12)) AND (I < >TSIZE) THEN PRINT : GOTO 19220
19100 VTAB 24: HTAB 10: PRINT "<N>, <P>, <R>, <E>";
19110 VTAB 24: HTAB 28: GET T$
19120 T$ = CHR$( ASC( LEFT$(T$,1)) -( ASC( LEFT$(T$,1)) > = 97) *32)
19130 IF T$ < >"N" AND T$ < >"P" AND T$ < >"R" AND T$ < >"E" THEN 19110
19140 IF T$ < >"N" THEN 19170
19150 IF I = TSIZE THEN 19110
19160 HOME : GOTO 19220
19170 IF T$ < >"P" THEN 19240
19180 IF I < = 12 THEN GOTO 19110
19190 IF I/12 < > INT(I/12) THEN I = INT(I/12) *12 -12: GOTO 19210
19200 I = I -24
19210 HOME : GOTO 19220
19220 IF I = TSIZE THEN 19050
19230 NEXT I
19240 IF T$ < >"R" THEN 19270
19245 IF SN% = 0 THEN 19110
19250 VTAB 3: HTAB 1: PRINT CHR$(13); CHR$(4);"PR# ";SN%: PRINT CHR$(9);"80N";: GOSUB 25000: PRINT CHR$(4);"PR# 0"
19260 GOTO 19110
19270 POKE 34,0: RETURN
20000 REM ** TITLES FOR PRINTOUT **
20005 PRINT CHR$(12);
20010 PRINT SPC( 9);"L O A N A N A L Y Z E R -- INSTALLMENT LOAN PAYBACK SCHEDULE"
20015 PRINT SPC( 9);"=============================================================="
20020 PRINT : PRINT : RETURN
20025 PRINT CHR$(12);
20030 PRINT SPC( 12);"L O A N A N A L Y Z E R -- MORTGAGE PAYBACK SCHEDULE"
20035 PRINT SPC( 12);"======================================================"
20040 PRINT : PRINT : RETURN
20045 PRINT SPC( 17);"AMOUNT: $ ";:F1$ = "#######":F2$ = "##":V = A: GOSUB 29000: PRINT O1$;
20050 PRINT SPC( 9);"ANNUAL INTEREST RATE: ";:F1$ = "##":F2$ = "###":V = ANNT: GOSUB 29000: PRINT O1$;" %"
20055 PRINT SPC( 2);"FINAL BALLOON PAYMENT: $ ";:F1$ = "#######":F2$ = "##":V = B: GOSUB 29000: PRINT O1$;
20060 PRINT SPC( 8);"DURATION OF BORROWING: ";: PRINT P$(4);" YY,MM"
20065 PRINT SPC( 5);"PAYMENT PER PERIOD: $ ";:F1$ = "#######":F2$ = "##":V = P: GOSUB 29000: PRINT O1$;
20070 PRINT SPC( 12);"PAYMENT FREQUENCY: ";
20075 IF PFQ$ = "Y" THEN PRINT "YEARLY": GOTO 20090
20080 IF PFQ$ = "Q" THEN PRINT "QUARTERLY": GOTO 20090
20085 PRINT "MONTHLY"
20090 IF TYPE$ = "I" THEN IF LN = 1 THEN PRINT SPC( 33);"(Linear Decline)": GOTO 20100
20095 PRINT
20100 PRINT
20105 RETURN
20170 REM ** COLUMN HEADINGS **
20180 PRINT SPC( 22);" | CUMUL. | CUMUL. | PAY-OFF "
20190 IF PFQ$ = "Y" THEN T$ = "YEAR ": GOTO 20230
20200 IF PFQ$ = "Q" THEN T$ = "QUARTER ": GOTO 20230
20210 T$ = "MONTH "
20230 PRINT SPC( 17);T$;
20240 PRINT "| PRINCIPAL | INTEREST | AMOUNT"
20250 PRINT SPC( 16);"----------------------------------------------------"
20260 RETURN
25000 REM ** PRINTOUT DETAIL **
25010 IF TYPE$ = "I" THEN GOSUB 20000: GOTO 25030
25020 GOSUB 20025
25030 GOSUB 20045
25040 GOSUB 20170
25100 FOR K = 1 TO PSIZE
25110 PRINT SPC( 18);:F1$ = "####":F2$ = "":V = K: GOSUB 29000: PRINT O1$;
25120 PRINT SPC( 3);"| ";
25150 F1$ = "#######":F2$ = "##":V = PTABLE(K,1): GOSUB 29000: PRINT O1$; SPC( 2);"| ";
25190 F1$ = "#######":F2$ = "##":V = PTABLE(K,2): GOSUB 29000: PRINT O1$; SPC( 2);"| ";
25230 F1$ = "#######":F2$ = "##":V = PTABLE(K,3): GOSUB 29000: PRINT O1$
25240 IF K/48 < > INT(K/48) THEN 25260
25245 IF K = N THEN 25400
25250 PRINT CHR$(12);: PRINT : PRINT : PRINT : GOSUB 20170
25260 REM
25400 NEXT K
25999 RETURN
29000 REM ***** PRINT USING ####,####,VAL
29010 F3$ = " ":F4$ = "000000000"
29020 IF LEN( STR$( INT(V))) > = LEN(F1$) THEN O1$ = STR$( INT(V)): GOTO 29040
29030 O1$ = LEFT$(F3$, LEN(F1$) - LEN( STR$( INT(V)))) + STR$( INT(V))
29040 F1$ = STR$(V)
29050 FOR VI = 1 TO LEN(F1$)
29060 IF MID$ (F1$,VI,1) = "." THEN 29100
29070 NEXT VI
29080 IF F2$ = "" THEN O2$ = "": GOTO 29150
29090 F1$ = "0": GOTO 29110
29100 F1$ = RIGHT$(F1$, LEN(F1$) -VI)
29110 IF F2$ = "" THEN O2$ = F1$: GOTO 29150
29120 IF LEN(F1$) > = LEN(F2$) THEN O2$ = LEFT$(F1$, LEN(F2$)): GOTO 29140
29130 O2$ = F1$ + LEFT$(F4$, LEN(F2$) - LEN(F1$))
29140 O2$ = "." +O2$
29150 O1$ = O1$ +O2$
29160 RETURN
30000 REM *** CONVERT DUR BACK TO YY,MM
30010 YY$ = STR$( INT(DUR))
30020 MM$ = STR$( INT((DUR - INT(DUR)) *12 +0.5))
30030 IF LEN(YY$) <2 THEN YY$ = "0" +YY$
30040 IF LEN(MM$) <2 THEN MM$ = "0" +MM$
30050 P$(4) = YY$ +"," +MM$
30060 RETURN
30070 REM *** FUNCTION ROUTINES FOR CALCULATIONS
30080 DEF FN CN(X) = INT(100 *X +0.5)/100
30090 REM ** NEWTON FUNCTIONS
30100 DEF FN F(S) = A *S ^(N +1) -(A +P) *S ^N -B *S +B +P
30110 DEF FN G(S) = A *(N +1) *S ^N -(A +P) *N *S ^(N -1) -B
30120 RETURN : REM NO MORE TRUE FUNCTIONS
30130 REM
30140 REM *** MORTAGE CALCULATIONS **
30150 REM
30160 REM FNMA(B,N,P,R)
30170 A = (P +(B *R *(1 +R) ^N)/((1 +R) ^N -1) -R *B)/(R *(1 +R) ^N/((1 +R) ^N -1))
30180 RETURN
30190 REM *** NEWTON ROUTINE ***
30200 S = 1.1
30210 IF FN F(S) < = 0.1 THEN R = S -1: RETURN
30220 S = S - FN F(S)/ FN G(S)
30230 GOTO 30210
30240 REM
30250 REM FNMN(A,B,P,R)
30260 N = LOG(R *(A -B)/(P -R *B -R *(A -B)) +1)/ LOG(1 +R)
30270 RETURN
30280 REM
30290 REM FNMP(A,B,N,R)
30300 P = (A -B) *R *(1 +R) ^N/((1 +R) ^N -1) +R *B
30310 RETURN
30320 REM
30330 REM ** CALCULATIONS FOR INSTALL
30340 REM
30350 REM FNIA(B,N,P,R)
30360 A = (P *N +B)/(1 +R *N)
30370 RETURN
30380 REM
30390 REM FNIR(A,B,N,P)
30400 R = (P *N +B -A)/(N *A)
30410 RETURN
30420 REM
30430 REM FNIN(A,B,P,R)
30440 N = (A -B)/(P -R *A)
30450 RETURN
30460 REM
30470 REM FNIP(A,B,N,R)
30480 P = (A -B +R *N *A)/N
30490 RETURN
31000 REM ** PRINTER INIT **
31100 HOME
31120 PRINT "DO YOU HAVE A PRINTER (Y/N) ?";
31130 GET T$
31140 T$ = CHR$( ASC( LEFT$(T$,1)) -( ASC( LEFT$(T$,1)) > = 97) *32)
31150 IF T$ < >"N" AND T$ < >"Y" THEN 31130
31155 PRINT T$
31160 IF T$ = "N" THEN SN% = 0: RETURN
31170 PRINT "SLOT NUMBER (1-6) ? ";
31180 GET T$
31190 T$ = CHR$( ASC( LEFT$(T$,1)) -( ASC( LEFT$(T$,1)) > = 97) *32)
31200 IF VAL(T$) <1 OR VAL(T$) >6 THEN 31180
31205 PRINT T$
31210 SN% = VAL(T$): RETURN